/*
 * main.c
 *
 *  Created on: 05/06/2011
 *      Author: joao
 */


#include "lista.h"
#include "arvore.h"
#include "leitura.h"


/* Funcao que trata a consulta do usuario, selecionando as palavras na Arvore e fazendo as
operações necessárias em listas. Em seguida, imprime as linhas que satisfazem os criterios da consulta */

void TratarConsulta(char consulta[100], no *P){
        int i = 0;
        char *palavra;
        char sinal;
        LISTA C, Auxiliar;
        FILE *fp;
        char linha[MAX_LINHA];
        int linha_atual = 1;
        int consults = 0;

        Cria(&C);
        Cria(&Auxiliar);

        /* Separa as palavras */
        while(consulta[i] != '\0'){
            if (ehLetra(consulta[i])){
                sinal = consulta[i-1];
                palavra =(char *) malloc(100*sizeof(char));
                strcpy(palavra, retornaPalavra(consulta, &i));
                if (busca(palavra, P) == NULL){
                    printf("Palavra \"%s\" nao encontrada.\n", palavra);
                } else {
                    if(sinal == '+'){
                        if (consults == 0)
                            CopiaLista(&busca(palavra, P)->linhas, &C);
                        else
                            Interseccao(&busca(palavra, P)->linhas, &Auxiliar, &C);

                        consults++;
                    } else if (sinal == '-'){
                        Diferenca(&Auxiliar, (&busca(palavra, P)->linhas), &C);
                    }
                    CopiaLista(&C, &Auxiliar);
                }
            } else {
                i++;
            }
        }
        printf("linhas a imprimir:");
        ImprimeLista(&C);

        if( (fp = fopen(arquivo, "rb")) == NULL){
            printf("Erro ao abrir o arquivo.\n");
        } else {
            /* Varre as linhas, verificando e imprimindo se necessario. */
            while(fgets(linha, MAX_LINHA, fp) != NULL){
                if(Localiza(linha_atual, &C) != FIM)
                    printf("linha %d: %s\n", linha_atual, linha);
                linha_atual++;
            }
        }

}

/* Recebe a consulta do usuario e chama as funcoes necessarias */
int main (){
    no *P = lerArquivo();
    char consulta[100];

    geraIndice(P);

    printf("Forneca uma consulta (formato +aaa-bbb) ou \"fim\" para sair: ");
    scanf("%s", &consulta);
    /* nao eh o jeito certo de ler palavra */

    while(strcmp("fim", consulta) != 0){
            TratarConsulta(consulta, P);

        printf("\n\nForneca uma consulta (formato +aaa-bbb) ou \"fim\" para sair: ");
            scanf("%s", &consulta);
    }

    return 0;
}
